﻿using System.Linq;
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RA_WebSite.Controllers;
using RA_WebSite.Models;

namespace RA_WebSite.Tests.Controllers
{
    [TestClass]
    public class CampioneTestControllerTest
    {

        /// <summary>
        /// Test per la visualizzione dei dettagli di un campione
        /// </summary>
        [TestMethod]
        public void Campione_Details()
        {
            var db = new RAContext();
            var ris = (from a in db.Campiones select a).FirstOrDefault();

            // Crea controller
            var controller = new CampioneController();

            // Azione
            var result = controller.Details(ris.Id) as ViewResult;

            var c = (Campione)result.ViewData.Model;

            Assert.IsNotNull(c);
        }

        /// <summary>
        /// Crea un oggetto campione e lo inserisce tramite l'apposita azione del controller
        /// </summary>
        [TestMethod]
        public void Campione_Create()
        {
            var db = new RAContext();
            
            var controller = new CampioneController();


            var campionetest = new Campione()
                {
                    Descrizione = "nuova pennellata",
                    Pittura_Id = 1
                };

            var result = controller.Create(campionetest) as ViewResult;

            var c = (from a in db.Campiones where a.Descrizione == "nuova pennellata" select a).FirstOrDefault();

            Assert.AreEqual("nuova pennellata", c.Descrizione);
        }

        /// <summary>
        /// Recupero un campione dal db e lo elimino tramite l'azione delete del controller.
        /// Dopo di che controllo che non sia presente all'interno del db
        /// </summary>
        [TestMethod]
        public void Campione_Delete()
        {
            var db = new RAContext();
            var ris = (from a in db.Campiones select a).FirstOrDefault();

            var controller = new CampioneController();

           var b = controller.DeleteConfirmed(ris.Id) as ViewResult;
           var g = (from a in db.Campiones where ris.Id == a.Id select a).FirstOrDefault();
            Assert.IsNull(g);
        }
    }
}
